// 数字计数
// https://www.luogu.com.cn/problem/P2602
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
using ll = long long;
using T = ll;
T rad(); // quick read
const int inf = 0x3f3f3f3f;
#define rf(i, n) for (int i = 1; i <= (n); ++i)
const int max_size = 5 + 100;
const int maxn = 5 + 20;

int n, x;
int dgt[maxn];
ll p10[maxn], now;
ll dp_mem[maxn]; // dp[i] 表示：前 i 位中，含 x 数的个数
// 记忆部分：不受限制，不是前导 0 的情况

ll dp(int i, bool allzero, bool lmt) {
    if (i == 0) return 0;
    if (!lmt && !allzero && dp_mem[i]) return dp_mem[i];
    ll ret = 0;
    for (int k = 0, ed = lmt ? dgt[i] : 9; k <= ed; ++k) {
        if (allzero && k == 0) { // 处理前导零
            ret += dp(i - 1, 1, lmt && k == ed);
            continue;
        }

        if (k == x) { // 当前位有贡献
            if (lmt && k == ed)
                ret += now % p10[i - 1] + 1; // 上界
            else
                ret += p10[i - 1]; // 满 i 位数数量
        }
        ret += dp(i - 1, 0, lmt && k == ed); // 低位的贡献
    }

    if (!lmt && !allzero) dp_mem[i] = ret;
    return ret;
}

ll pre(ll num) {
    n = 0, now = num;
    memset(dp_mem, 0, sizeof(dp_mem));
    while (num > 0) dgt[++n] = num % 10, num /= 10;
    return dp(n, 1, 1);
}

int main() {
    p10[0] = 1;
    for (int i = 1; i < maxn; ++i) p10[i] = p10[i - 1] * 10;
    ll l = rad(), r = rad();
    // x = 9;
    // cout << pre(99);
    for (x = 0; x <= 9; ++x)
        cout << pre(r) - pre(l - 1) << " ";
}

T rad() {
    T back = 0;
    int ch = 0, posi = 0;
    for (; ch < '0' || ch > '9'; ch = getchar())
        posi = ch ^ '-';
    for (; ch >= '0' && ch <= '9'; ch = getchar())
        back = (back << 1) + (back << 3) + (ch & 0xf);
    return posi ? back : -back;
}